package com.wlz.udp;

import java.io.IOException;
import java.net.*;
import java.util.Scanner;

/*
客户端
 */
public class UDPEchoClient {
    private DatagramSocket socket = null;
    private String serverIP;
    private int serverPort;
    //客户端启动,需要知道服务器在哪里!!
    public UDPEchoClient(String serverIP,int serverPort) throws SocketException {
        //对于客户端来说,不需要显示关联端口
        //不代表没有端口,而是系统自动分配了空闲的端口
        socket = new DatagramSocket();
        this.serverIP = serverIP;
        this.serverPort = serverPort;
    }
    public void start() throws IOException {
        //通过这个客户端可以多次和服务器进行交互
        Scanner scanner = new Scanner(System.in);
        while (true){
            //1.先从控制台,读取一个字符串过来
            //  先打印一个提示符,提示用户要输入内容
            System.out.println("-> ");
            String request = scanner.next();
            //2.把字符串构造成UDP packet,并进行发送
            //  这个构造也是把数据构造成DatagramPacket一方面需要String中的getBytes数组,
            //  另一方面需要指定服务器的ip和端口,此处不是通过InetAddress直接构造,而是分开设置
            DatagramPacket requestPacket = new DatagramPacket(
                    request.getBytes(),
                    request.getBytes().length,
                    InetAddress.getByName(serverIP),//一方面设置字符串的ip,一方面设置端口
                    serverPort);
            socket.send(requestPacket);//发送操作
            //3.客户端尝试读取服务器返回的响应
            DatagramPacket responsePacket = new DatagramPacket(new byte[4096],4096);
            socket.receive(responsePacket);
            //4.把响应数据转换成String显示出来
            String response = new String(
                    responsePacket.getData(),
                    0,
                    responsePacket.getLength());
            System.out.printf("req: %s,resp: %s\n",request,response);
        }
    }

    public static void main(String[] args) throws IOException {
        UDPEchoClient udpEchoClient = new UDPEchoClient("127.0.0.1",9090);
        udpEchoClient.start();
    }
}